Design tools are employed by developers at design time to create user applications that are executed at run time of the applications. Generally, software developers (e.g., individuals developing software applications) utilize design tools to create unique software applications. These applications often involve selecting “visual” components/objects such as buttons, menus, or other user interface elements to enable an end user to operate the application. The design tool facilitates application development by providing design time support to enable the developer to simulate the run time environment associated with the application. “Design time” refers to manipulating these components or objects during the development process. A designer is one aspect of a design tool that provides design time support for visually manipulating components, especially visual components such as forms and controls. Design time support for manipulating components (e.g., via the designer) historically has been built into the design tool and the development of such support is generally independent of component development. Thus, new versions of the design tool generally need to be created to support new features in the components.
Designers have typically been employed in many well-known development environments such as Visual Basic or Visual C++, for example. Designers have also been employed by software developers—this includes the ability for third parties to plug in custom designers to the design tool. One problem with conventional custom designers is that they generally are an all-or-nothing process. For example, a vendor who supplies development tool components cannot augment existing design-time support for a single component, but typically provides a custom designer to handle all components. Unfortunately, this makes creating a designer a daunting task due to the complexity and volume of supporting all existing components. Moreover, this can also lead to feature inconsistencies between designers.
Another problem associated with conventional designers is that they are monolithic requiring the developer to choose which designer to use—the component is not permitted to participate in selection of the designer; which can result in feature inconsistencies between designers.